Field of the Invention
Embodiments of the present invention relate, in general, to application virtualization and, more particularly, to access to data storage independent of a cluster file system.
Relevant Background
It is unclear when computer clusters were first formed. Most believe that it occurred when early computer users found that they could not fit all their work on one computer and then began linking them together. By the mid 60s, it became widely recognized that forming a computer cluster provided significant processing advantages. Cluster computing typically connects a plurality of computing nodes to gain greater computing power and better reliability using low or lower cost computers. Connecting a number of computers or servers via a fast network can form a cost effective alternative to a single high performance computer. In cluster computing, the activities of each node (computer/server) in the cluster are managed by a clustering middleware that sits atop each node. This enables a user to treat the cluster as one large, cohesive computer.
A server cluster is a group of at least two independent computers (servers) connected by a network and managed as a single system in order to provide high availability of services for clients. Server clusters include the ability for administrators to inspect the status of cluster resources, and accordingly balance workloads among different servers in the cluster to improve performance. Such manageability also provides administrators with the ability to update one server in a cluster without taking important data and applications offline. As can be appreciated, server clusters are used in critical database management, file and intranet data sharing, messaging, general business applications, and the like.
Server clusters come in all shapes and sizes, but they are generally either asymmetric clusters or symmetric clusters. In an asymmetric cluster, a standby server exits only to take over for another server in the event of failure. This type of cluster provides high availability and reliability of services, but does so at the cost of having redundant and unused capability. The standby server performs no useful work and is either as capable or more capable than the primary server. In a symmetric server cluster, every server in the cluster preforms some useful work and each server in the cluster is the primary host for a particular set of applications. If a server fails, the remaining servers continue to process the assigned set of applications as well as picking up new applications from the failed server. Symmetric server clusters are more cost effective but, in the event of a failure, the additional load on the working servers can make them fail as well, leading to the possibility of a cascading failure.
On each server, there is one or more instantiations of various applications. Underlying each of these applications is a database engine such as Microsoft Transacted Structured Query Language or T-SQL (commonly known as SQL server). T-SQL is a special purpose programming language designed for managing data in relational database management systems. Originally built on relational algebra and tuple relational calculus, its scope includes data insert, query, update and delete functionality, schema creation and modification, and data access control. Other relational alternatives to SQL include .QL, 4D Query Language, Datalog, URL based query method, IBM Business Systems I2, ISBL, JPQL, Object Query Language, UnQL, QBE, and the like.
SQL or SQL server is a popular database engine that servers use as a building block for many larger custom applications. Each application built using SQL Server (or the like) typically communicates with a single instance of the database engine using that server's name and Internet Protocol address. Thus, servers with many applications depending on SQL server to access a database must normally run an equal number of instances of SQL server. In most cases, each instance of SQL server runs on a single node within the server cluster, each with its own name and address. If the node (server) that is running a particular instance of SQL server fails, the databases are unavailable until the system is restored on a new node with a new address and name. Moreover, if the node becomes heavily loaded by one or more applications, the performance of the database and other applications can be degraded.
As mentioned, cluster computing relies on centralized management that enables the nodes to be orchestrated as shared servers. Cluster systems are commonly used in web-service support (web servers) or computation intensive applications that involve scientific calculations such as computational fluid dynamics. In each case, the “load-balancing” is performed to manage the work-share to achieve better performance.
Highly available computer clusters (failover clusters) are used to improve the reliability of the cluster approach. In such architecture, redundant nodes, or nodes that are not fully utilized, exist that are capable of accepting a task from a node or component that fails. High availability clusters attempt to prevent single point failures. As one of reasonable skill in the relevant art can appreciate, the establishment, configuration, and management of such clusters is not trivial.
There are numerous cluster approaches, but in a typical system, each computer utilizes identical operating systems, often operating on the same hardware, and possesses local memory and disk space storage. But the network may also have access to a shared file server system that stores data pertinent to each node as needed.
A cluster file system or shared file system enables members of a server cluster to work with the same data files at the same time. These files are stored on one or more storage disks that are commonly assessable by each node in the server cluster. A storage disk, from a user or application perspective, is a dumb device that stores data. Each disk has a set number of blocks from which data can be read or to which data can be written. For example, a storage disk can receive a command to retrieve data from block 1234 and send that data to computer A. Alternatively, the disk can receive a command to receive data from computer B and write it to block 5678. These disks are connected to the computing devices issuing instructions via SCSI, IDE, FDDI, and similar interfaces. Storage disks do not create files or file systems; they are merely repositories of data residing in blocks.
Operating systems operating on each node include a file system that creates and manages files and file directories. It is these systems that inform the application where the data is located on the storage disk. The file system maintains some sort of table (often called a file access table) that associates logical files with the physical location of the data, i.e. disk and block numbers. For example, File ABC is found in Disk 1, blocks 1234, 4568, 3412 and 9034, while File DEF is found at Disk 2, blocks 4321, 8765 and 1267. The file system manages the storage disk. Thus when an application needs File ABC, it goes to the file system and requests File ABC. The file system then retrieves the data from the storage disk and delivers it to the application for use.
As one of reasonable skill in the relevant art will appreciate, the description above is rudimentary and there are multiple variations and adaptations to the architecture presented above. A key feature of the system described above, however, is that all of the applications running on an operating system use the same file system. By doing so, the file system guarantees data consistency. For example, if File ABC is found in, among others, block 1234, File DEF will not be allocated to block 1234 to store additional data unless File ABC is deleted and the blocks 1234 are released.
When multiple computers or nodes in a server cluster need access to the same data, data consistency is a prime concern. One approach known in the prior art to address this concern is referred to as a network storage system or NAS, Network Attached Storage. In such a system, a file server acts as a buffer between the nodes and the storage disk(s). In essence, the file server is a common file system for the cluster. The file server receives one or more requests from an application running on a node and acts much like an internal file system to write or retrieve data from the storage disk(s). Indeed the only real difference is that the requests are transmitted via a network rather than an internal bus. Again, data consistency is guaranteed since only the file server has access to the physical storage disk.
A single file server, however, is clearly a limitation to an otherwise flexible cluster of computer nodes. Another approach to common data storage is to connect a plurality of storage devices (disks) to a plurality of computing nodes. Such a Storage Area Network (SAN) enables any computing node to send disk commands to any disk. But such an environment creates disk space allocation inconsistency and file data inconsistency. For example, two computers can independently direct data to be stored in the same blocks. These problems make it impossible to use shared disks with a regular file system.
A cluster file system resolves these problems by enabling a multi-computer architecture (computing cluster) to share a plurality of storage disks without having the limitation of a single file system server. Such a system synchronizes the file allocation table (or the like) resident on each node so that each node knows the status of each storage disk. The cluster file system communicates with the file system of each node to ensure that each node possesses accurate information with respect to the management of the storage disks. The cluster file system therefore acts as the interface between the file systems of each node while applications operating on each node seek to retrieve data from and write data to the storage disks.
Applications can also operate in a virtual environment that is created on top of one or more nodes using the same approach to access data. One of reasonable skill in the relevant art will recognize that virtualization, broadly defined, is the simulation of the software and/or hardware upon which other software runs. This simulated environment is often called a virtual machine (“VM”). A virtual machine is thus a simulation of a machine (abstract or real) that is usually different from the target (real) machine (where it is being simulated on). Virtual machines may be based on specifications of a hypothetical computer or they can emulate the computer architecture and functions of a real world computer. There are many forms of virtualization, distinguished primarily by the computing architecture layer, and virtualized components, which may include hardware platforms, operating systems, storage devices, network devices, or other resources.
Application or process virtualization includes autonomic computing. Autonomic computing is a scenario in which the computing environment is able to manage itself based on perceived activity. The usual goal of application or process virtualization is to centralize administrative tasks while improving scalability and overall hardware-resource utilization. This type of parallelism tends to reduce overhead costs and it differs from multitasking, which involves running several programs on the same operating system.
Hardware virtualization or platform virtualization refers to the creation of a virtual machine that acts like a real computer with an operating system. Software executed on these virtual machines is separated from the underlying hardware resources. For example, a computer that is running an operating system, such as MICROSOFT WINDOWS®, may host a virtual machine that looks like a computer with using a different operating system, such as the UBUNTU LINUX® operating system.
In hardware virtualization, the host machine is the actual machine on which the virtualization takes place, and the guest machine is the virtual machine. The words “host” and “guest” are used to distinguish the software that runs on the physical machine from the software that runs on the virtual machine. The software or firmware that creates a virtual machine on the host hardware is sometimes called a “hypervisor.”
In order to provide the virtualization stack described above, a shared storage scheme is typically required. One suitable approach to shared storage is a disk or set of disks that are access-coordinated to the servers participating in a cluster. One such system is MICROSOFT CLUSTER SERVER SOFTWARE™ or MSCS. MICROSOFT CLUSTER SERVER SOFTWARE™ requires strict adherence to a Hardware Compatibility List (“HCL”) that demands each server possess the same edition and version of the operating system and licensing requirements (i.e. SQL Server Enterprise vs. SQL Server Standard). However, the complex implementation and licensing cost to such systems can be a major roadblock for most enterprises.
When HP PolyServe or the like is used to coordinate access to data, the failover system requires a cluster file system (i.e. PSFS). Recall that a cluster file system is a specialized file system (e.g. Melio FS, PSFS, GPFS, etc.) that is shared between the nodes by being simultaneously mounted on multiple servers allowing concurrent access to data. Cluster file systems are complex and require significant expenditure of time and capital resources to set up, configure, and maintain.
What is needed, therefore, is a system that enables application virtualization and failover without the requirements of a specific cluster file system such as PSFS, MelioFS or a highly restrictive and expensive clustering solution such as MSCS. Additional advantages and novel features of this invention shall be set forth in part in the description that follows, and in part will become apparent to those skilled in the art upon examination of the following specification, or may be learned by the practice of the invention. The advantages of the invention may be realized and attained by means of the instrumentalities, combinations, compositions, and methods particularly pointed out in the appended claims.